// @/src/api/ShopApi.js
import axiosInstance from '@/utils/request' // 确保你的axios实例路径正确

/**
 * 将商品添加到指定用户的购物车或更新数量
 * POST /carts/{userId}/items
 * @param {Long} userId - 用户ID
 * @param {Long} productId - 商品ID
 * @param {Integer} quantity - 数量
 * @returns {Promise} Axios Promise，返回ResponseResult<CartDTO>
 */
export const addItemToCartAPI = (userId, productId, quantity) => {
    return axiosInstance.post(`/product/carts/${userId}/items`, null, { // POST请求体为空，参数通过params传递
        params: {
            productId,
            quantity
        }
    })
}

/**
 * 获取指定用户购物车中的所有商品列表
 * GET /carts/{userId}/items
 * @param {Long} userId - 用户ID
 * @returns {Promise} Axios Promise，返回ResponseResult<List<CartDTO>>
 */
export const listCartItemsAPI = (userId) => {
    return axiosInstance.get(`/product/carts/${userId}/items`)
}

/**
 * 更新购物车中某条记录的商品数量
 * PUT /carts/items/{cartId}
 * @param {Long} cartId - 购物车的唯一ID
 * @param {Integer} quantity - 更新后的新数量
 * @returns {Promise} Axios Promise，返回ResponseResult
 */
export const updateCartItemQuantityAPI = (cartId, quantity) => {
    return axiosInstance.put(`/product/carts/items/${cartId}`, null, { // PUT请求体为空，参数通过params传递
        params: {
            quantity
        }
    })
}

/**
 * 从购物车中移除单个商品
 * DELETE /carts/items/{cartId}
 * @param {Long} cartId - 要移除的购物车记录的唯一ID
 * @returns {Promise} Axios Promise，返回ResponseResult
 */
export const removeCartItemAPI = (cartId) => {
    return axiosInstance.delete(`/product/carts/items/${cartId}`)
}

/**
 * 批量从购物车中移除多个商品
 * DELETE /carts/items/batch
 * @param {Array<Long>} cartIds - 要移除的购物车记录ID的列表
 * @returns {Promise} Axios Promise，返回ResponseResult
 */
export const removeCartItemsBatchAPI = (cartIds) => {
    // 对于DELETE请求，如果需要传递请求体（request body），则需要将数据放在配置对象的 'data' 属性中
    return axiosInstance.delete('/product/carts/items/batch', {
        data: cartIds
    })
}

/**
 * 清空指定用户的所有购物车项
 * DELETE /carts/{userId}/clear
 * @param {Long} userId - 用户ID
 * @returns {Promise} Axios Promise，返回ResponseResult
 */
export const clearCartAPI = (userId) => {
    return axiosInstance.delete(`/product/carts/${userId}/clear`)
}

/**
 * 获取用户购物车中的商品项总数（不是商品总数量，而是购物车中不同商品的种类数）
 * GET /carts/{userId}/count
 * @param {Long} userId - 用户ID
 * @returns {Promise} Axios Promise，返回ResponseResult<Integer>
 */
export const getCartItemCountAPI = (userId) => {
    return axiosInstance.get(`/product/carts/${userId}/count`)
}